package com.catchman.annotation;

import java.lang.annotation.*;

/**
 * 系统用户操作日志，由于该注释通知中使用shiro获取了用户信息，故如果在系统启动或者系统自动调用的一些函数上使用该注释会报错（可以根据需求修改）
 * @author CatchMan
 */
//@Target –注解用于什么地方，默认值为任何元素，表示该注解用于什么地方。可用的ElementType指定参数
//        ● ElementType.CONSTRUCTOR:用于描述构造器
//        ● ElementType.FIELD:成员变量、对象、属性（包括enum实例）
//        ● ElementType.LOCAL_VARIABLE:用于描述局部变量
//        ● ElementType.METHOD:用于描述方法
//        ● ElementType.PACKAGE:用于描述包
//        ● ElementType.PARAMETER:用于描述参数
//        ● ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Target({ElementType.TYPE, ElementType.METHOD})
//@Retention –什么时候使用该注解，即注解的生命周期，使用RetentionPolicy来指定
//        ●   RetentionPolicy.SOURCE : 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义，所以它们 不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
//        ●   RetentionPolicy.CLASS : 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式
//        ●   RetentionPolicy.RUNTIME : 始终不会丢弃，运行期也保留该注解，因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
@Retention(RetentionPolicy.RUNTIME)
//它声明了@Inherited注解，表明声明了它的类的子类是可以继承它的。
@Inherited
//@Documented –注解是否将包含在JavaDoc中
@Documented
public @interface OperationLog {
    String value() default "";
}
